Simultaneous Localization and Mapping or SLAM is a technique in robotics that simultaneously builds a map from an unknown environment while keeping track of the robot's position.
So, the problem of SLAM is concerned with two parts. The first part is concerned with the mapping and tries to find a representation of environment based on the data collected.
The second part is about the robot's position in this environment. Based on the odometry data and on the observed surroundings the robot tries to keep track of its position with respect to the map. However, these two parts cannot be solved separately. Basically, an unbiased map is required to accurately localize the robot, but a good pose estimation is needed to build and improve the map. Therefore, the SLAM problem is often compared to the chicken-or-egg problem. 
Slam also needs to be able to handle noise on different sensors. There are many variables that can introduce noise. Examples are drifting of wheels and inaccurate movements. The odometry data acquired from the robot is never perfect and the laser range finder is also not flawless.
The most commonly known SLAM algorithms are GraphSlam \cite{thrun2006graph} and FastSLAM \cite{montemerlo2002fastslam}. The SLAM algorithm used in this research is called TinySlam \cite{steux2010tinyslam} and is explained in section \ref{tinyslam}.

\subsection{TinySLAM}
\label{tinyslam}
TinySlam aims to be a simple and small algorithm that can provide good performances and yet can be easily understood. Even though TinySLAM is a small algorithm, it works robustly with laser range data and robot odometry. These are the main reasons for chosing TinySLAM over more commonly known algorithms like GraphSLAM and FastSLAM.

Originally, TinySlam was tested on a six-wheeled robot with four driving and steering wheels and two odometry wheels. Thanks to the rocker bogie suspension used in the Mars–rover like robots, the two odometry wheels are always touching the ground. Not being powered removes the issue of wheel slippage. Therefore, this setup provides very good odometry readings.
The main operations of the mapping algorithm are the calculation of the distances and the map update. The distance calculation is taking the output of the laser scan and the currently known map into account. The map update is using the new data to update the map.

For scan-matching of the scans and the map, TinySlam is using a simple Monte-Carlo approximation algorithm, or it can be used alongside a particle filter. For the Monte-Carlo search, the odometry can be used only as a starting point. In order to accommodate odometry errors like slippage the particle filtering must be used.

Although the output map has a resolution of 1cm, because the function that translates laser scans to the map takes into account several points for one output, a minor movement of the robot can still be measured because the laser readings will have changed. This can be achieved by using latency, which relates the map resolution to the movement speed and laser scan frequency by setting the required number of laser scans needed for a correct measurement to occur. 

Updating the map is done using an algorithm based on the Bresenham\cite{bresenham1965algorithm} line concept. The laser scan results are added to the map in a way so the matching algorithm converges faster. Instead of using single points for obstacles, the algorithm uses a function that places a mask over the obstacle, guiding the convergence of the scan matching algorithm.